﻿/************************************************************************
** 文  件：
**	FileClear.h
** 功  能：
**	系统文件清理，包括清理设备报警图、录像、手动录像等文件、清理过期数据
** 作  者：
**	email:lixx2048@163.com
**  wechat:lixiang6153
**  QQ:941415509
** 日  期：
**	2024/03/15	14:00:00
** 说  明：
**	无
** 版  本：
**	2024/03/15	14:00:00		1.0		lixx2048@163.com
/************************************************************************/
#pragma once
#include <thread>
#include <memory>
#include <queue>
#include <mutex>
#include <string>
#include "../entity/AlarmInfo.h"

class FileClear:
	public std::enable_shared_from_this<FileClear>
{
	// 清理设备列表
	typedef std::queue<std::string> DEVICE_LIST;
	// 清理文件列表
	typedef std::queue<std::string> FILE_LIST;
public:
	// 构造函数
	FileClear();
	virtual ~FileClear();

public:
	// 启动分析
	void Start();
	// 停止分析
	void Stop();
	// 清理设备
	void AddDevice(std::string);
	// 清理文件
	void AddFile(std::string);

protected:
	// 清理设备报警
	void ClearDeviceAlarm(std::string);
	// 清理过期报警
	void ClearExpiredAlarm();
	// 上传报警记录
	void UploadAlarm(std::string);
	// 上传报警录像
	void UploadRecord(std::string);

protected:
	// 运行标志
	bool m_run;
	// 清理线程
	std::thread m_clear_thread;
	// 上传线程
	std::thread m_upload_thread;
	// 设备大锁
	std::mutex m_device_lock;
	// 清理设备
	DEVICE_LIST m_devices;
	// 文件大锁
	std::mutex m_file_lock;
	// 清理文件
	FILE_LIST m_files;
};

typedef std::shared_ptr<FileClear> FileClearPtr;